package nine;

import java.util.Arrays;

import static util.Print.print;

/**
 * Created by ab on 2016/11/3.
 * 策略模式
 * 创建一个能根据所船体的参数对象的不同而具有不同行为的方法。
 * 策略就是作为参数传递过去的对象，它包含有执行的代码。
 * 这里的Processor就是一个策略。
 */
class Processor{
    public String name(){
        return getClass().getSimpleName();
    }
    Object process(Object input){return input;}
}

class Upcase extends Processor{
    String process(Object input){
        return ((String)input).toUpperCase();
    }
}

class Downcase extends Processor{
    String process(Object input){
        return ((String)input).toLowerCase();
    }
}

class Splitter extends Processor{
    String process(Object input){
        return Arrays.toString(((String)input).split(" "));
    }
}
public class lesson1 {
    public static void process(Processor p,Object s){
        print("Using Processor "+p.name());
        print(p.process(s));
    }
    public static String s="Disagreement with beliefs is by definition incorrect";
    public static void main(String[] args){
        process(new Upcase(),s);
        process(new Downcase(),s);
        process(new Splitter(),s);
    }
}
